package cn.springcloud.api.apiUtils;


import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.ResourceUtils;

import java.io.File;
import java.io.FileNotFoundException;

public class FileNameUtil {

    /**
     * 文件随机名称，使用PathFormat.parse()格式化
     */
    public static final String RANDOM_FILENAME = "{yyyy}{MM}{dd}/{time}{rand:6}";

    /**
     * 随机的文件名称,没有年月日
     */
    public static final String RANDOM_TIME_FILENAME = "{time}{rand:6}";

    /**
     * 文件原始名和随机名的分隔符
     */
    public static final String ORIGIN_FILENAME_SEPARATOR = "_";

    /**
     * 获得随机文件名称
     *
     * @return
     */
    public static String randomFilename() {
        return PathFormat.parse(RANDOM_FILENAME);
    }

    public static void main(String[] args) {
        System.out.println(randomFilename());
    }

    /**
     * 获得随机文件名称
     *
     * @return
     */
    public static String randomTimeFilename() {
        return PathFormat.parse(RANDOM_TIME_FILENAME);
    }

    /**
     * 生成随机文件名
     *
     * @param parentFolder     父级文件名
     * @param originalFilename 文件原始名
     * @return
     */
    public static String genRandomFileName(String parentFolder, String originalFilename) {

        String fileName = randomFilename() + ORIGIN_FILENAME_SEPARATOR + StringEscapeUtils.unescapeHtml4(originalFilename);
        if (StringUtils.isNotEmpty(parentFolder)) {
            //最终写入服务器文件夹的文件名。
            return parentFolder + "/" + fileName;
        }
        return fileName;
    }

    /**
     * 生成随机文件名
     *
     * @param originalFilename 文件原始名
     * @return
     */
    public static String genRandomFileName(String originalFilename) {

        return randomTimeFilename() + ORIGIN_FILENAME_SEPARATOR + StringEscapeUtils.unescapeHtml4(originalFilename);
    }

    /**
     * 获取模板文件的绝对路径
     *
     * @param fileName
     * @return
     */
    public static String getResourcesAbsolutePath(String folder, String fileName) {
        try {
            File file = ResourceUtils.getFile("classpath:" + (StringUtils.isNotBlank(folder) ? folder + "/" : "") + fileName);
            return file.getAbsolutePath();
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
    }

}
